package editor.cn;
class Solution718{
    public static void main(String[] args) {
        Solution solution = new Solution718().new Solution();
    }
    //leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int findLength(int[] nums1, int[] nums2) {
        //子数组：子数组是一个数组中一段连续的部分。
        //子序列：子序列是从一个数组中选出若干元素，不一定连续，但元素的相对顺序与原数组一致。
        int n1= nums1.length;
        int n2= nums2.length;
        int ans=0;
        int[][] dp = new int[n1+1][n2+1];//dp[i][j]表示截止目前两者的长度为ij的最长子数组的长度
        for (int i = 0; i < n1; i++) {
            for (int j = 0; j < n2; j++) {
                dp[i+1][j+1]=nums1[i]==nums2[j]?dp[i][j]+1:0;
                //如果不连续直接设置为0了，那么就要及时保存dp，这里就用到ans来保存，连续的话，就是前面的加1
                ans=Math.max(ans,dp[i+1][j+1]);
            }
        }
        return ans;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}












